// 函数递归练习题

#include<stdio.h>
#include<string.h>
//---------------------------------------------小节分割线--------------------------------------------
// 练习：编写一个函数reverse_string(char* string)(递归实现)
// 将字符串反向存储，而不时反向打印，不能使用库函数
// 例：abcdef\0变成fedcba\0
// int my_get_strlen(char* string)
// {
//     int string_lenth = 0;
//     while (*string != '\0')
//     {
//         string++;
//         string_lenth++;
//     }
//     return string_lenth;
// }
// void reverse_string(char* string)
// {
//     // 思路：abcdef\0变成fbcdea\0，再变成fecdba\0，逐渐向内靠拢，完成循环效果
//     // 需要定义两个操作下标left和right
//     // right的下标需要确定，但是不能用库函数
//     // 循环读取字符，直到\0，就是数组的长度
//     int left = 0;
//     int right = my_get_strlen(string) - 1;
//     while (left < right)
//     {
//         int tmp = string[left]; // string[left]是使用数组的读取形式，如果使用指针读取可以使用*(string + left)
//         string[left] = string[right];
//         string[right] = tmp;
//         left++;
//         right--;
//     }
// }
// void reverse_string(char* string)
// {
//     // 使用递归的方式写
//     // abcdef的排序→a和f的交换+bcde的排序
//     // 空  abcdef\0 → a  abcdef\0 → a  fbcdef\0 → a  fbcde\0\0这时候就可以递归了  → a  fbcdea\0
//     // 使用以上5步，完成一次递归
//     int left = 0;
//     int right = my_get_strlen(string) - 1;
//     int tmp = string[left];
//     string[left] = string[right];
//     string[right] = '\0';
//     if (left < right){
//         reverse_string(string+1);}    
//     string[right] = tmp;
// }
// int main()
// {
//     // char arr[] = "abcdef";
//     char arr[] = "1234567";
//     printf("原数组：%s\n", arr);
//     reverse_string(arr);
//     printf("更改后：%s\n", arr);
//     return 0;
// }
// 
//---------------小分割线 >.< --------------------
// 练习：计算n的k次方
double Pow(int n, int k)
{
    if (k == 0)
        return 1.0;
    else if (k > 0)
        return n * Pow(n ,k - 1);
    else
        return 1.0/ (Pow(n ,-k));
}
int main()
{
    int n = 2;
    int k = -3;
    double ret = Pow(n, k);
    printf("%lf\n", ret);
    return 0;
}